package com.tomasio.projects.welcome.integration
{
	
	import com.tomasio.projects.welcome.model.Pessoa;
	
	import flash.events.Event;
	
	import mx.collections.ArrayCollection;
	import mx.controls.Alert;
	import mx.rpc.AsyncToken;
	import mx.rpc.Responder;
	import mx.rpc.events.FaultEvent;
	import mx.rpc.events.ResultEvent;
	import mx.rpc.remoting.mxml.RemoteObject;
	
	
	
	[Bindable]
	public class PessoaDAO extends RemoteObject
	{
		public var pessoa:Pessoa = new Pessoa();
		
		public var pessoas:ArrayCollection = new ArrayCollection();
		
		
		
		public function PessoaDAO()
		{
			this.showBusyCursor = true;
			super("autorizacaoServiceDestination");
		}
		
	
		public function call(Method:AsyncToken, NewResult:Function):void{  
			var L_Async:AsyncToken;  
			L_Async = Method;  
			L_Async.addResponder(new Responder(NewResult, DefaultFaultHandler));  
		}  
		public function get getConexao():RemoteObject{  
			return this;  
		}  
/*		public function findAll():void{
			this.call(this.getConexao.findAllGruposAutorizacaoDeAcesso(), findAllResultHandler);
		}
*/		public function searchByName(term:String):void{
			this.call(this.getConexao.searchPessoasByName(term), findAllResultHandler);
		}
		public function searchByNameWithFotos(term:String):void{
			this.call(this.getConexao.searchPessoasByNameWithFotos(term), findAllResultHandler);
		}
		
/*		public function create(pessoa:Pessoa):void{
			this.call(this.getConexao.createPessoa(pessoa), createResultHandler);	
			
		}
*/
/*		public function update(pessoa:Pessoa):void{
			this.call(this.getConexao.updatePessoa(pessoa), updateResultHandler);	
			
		}
*/
		public function find(id:Number):void{
			this.call(this.getConexao.findPessoa(id), findResultHandler);
		}
/*		public function remove(id:Number):void{
			this.call(this.getConexao.removePessoa(id), removeResultHandler);
		}
*/				
		
		
		/*
		**
		** Handlers
		**
		*/
		
		private function findAllResultHandler(event:ResultEvent):void {
			this.pessoas = event.result as ArrayCollection;
			this.dispatchEvent(new Event("pessoasLoaded"));
		}
		private function DefaultFaultHandler(Result:FaultEvent):void{     
			Alert.show(Result.fault.faultString,"Error");  
		} 
		private function createResultHandler(event:ResultEvent):void {
			this.pessoa = new Pessoa();
			this.dispatchEvent(new Event("pessoaCreated"));
			
		}
		private function findResultHandler(event:ResultEvent):void {
			pessoa = event.result as Pessoa;
			this.dispatchEvent(new Event("pessoaLoaded"));
			
		}
		private function removeResultHandler(event:ResultEvent):void{
			this.dispatchEvent(new Event("pessoaRemoved"));
		}
		private function updateResultHandler(event:ResultEvent):void{
			this.dispatchEvent(new Event("pessoaUpdated"));
		}

		
	}
}